package com.lanhai.zhonglai.interfaces;
   
import java.util.List;

import com.lanhai.zhonglai.beans.StationBean; 
import com.lanhai.zhonglai.dao.StationGroupDao;
import com.lanhai.zhonglai.enums.CacheStationEnumType;
import com.lanhai.zhonglai.enums.TransDirectionEnum;  

/**
 * 设备数据接口
 * @author zhengwei
 *
 */
public interface IStation {
  
	/**
	 * 获取点位对应的机台
	 * @param dotNO
	 * @param cache
	 * @return
	 */
	StationBean getBeanByDot(int dotno );
 

	/**
	 * 通过Ip获取机台
	 * @param ip
	 * @param line
	 * @return
	 */
	StationBean getBeanByIP(String ip, int line);

	/**
	 * 获取机台解析类
	 * @param ip
	 * @return
	 */
	String getCmdSign(String ip);
 
	void init();
	
	
	 boolean stationCanUse(int dotno,int agvid);
 
	 /**
	  * 机台是否开启
	 * @param dotno
	 * @param agvid
	 * @return
	 */
	boolean stationNotDisable(int dotno );
	 
	/**
	 * 在机台处强锁机台
	 * @param dotno
	 * @param agvId
	 * @return
	 */
	 void lockStationOnTarget(int dotno, int agvId);
	
	/**
	 * 释放工位和agv对应的机台（传输完成回到二维码处时）
	 * @param dotno
	 * @param agvId
	 */
	void unlockStationForDot(int dotno, int agvId);

	 

	
	/**
	 * 后台用，释放机台
	 * @param dotno
	 */
	void unlockStationByHacker(int dotno);
	 
	
	/**
	 * 更新popald的上下料状态（机台视角）
	 * 因为状态不重要，机台会一直发送，没必要写缓存
	 * @param isIn
	 */
	void updatePopaidDirection(int dotno,boolean directionOut);
 
	
	 
	/**
	 * 工序是否有可用的机台
	 * @param process
	 * @return
	 */
	boolean hasEmpty(String process);
	
	boolean hasEmpty(List<String> processList);
	
	void updateStationState(int dotno,boolean disable);
	
	void turnStation(int dotno );

	 
	/**
	 * 向机台发送重置信号
	 * @param dotno
	 */
	void resetStation(int dotno);
	
	
	boolean findCache(CacheStationEnumType type,int agvid, boolean toIn,boolean islock);
	
	
	/**
	 * 找出料机台，顺便锁
	 * @param dotno
	 * @param agvid
	 * @param process
	 * @param islock
	 * @return
	 */
	StationGroupDao fetchNextOutStation(int dotno, int agvid, String process,boolean islock);
	
	StationGroupDao fetchNextBSGOutStation(int dotno, int agvid, String process,int number);
	
	
	/**
	 * 找入料机台，顺便锁
	 * @param dotno
	 * @param agvid
	 * @param process
	 * @param specialLine
	 * @param islock
	 * @return
	 */
	StationGroupDao fetchNextInStation(int dotno, int agvid, String process, int specialLine,boolean islock);
	
	/**
	 * 找批量出料机台，顺便锁
	 * @param dotno
	 * @param agvid
	 * @param processlist
	 * @param islock
	 * @return
	 */
	StationGroupDao fetchNextOutStation(int dotno, int agvid, List<String> processlist,boolean islock);
	
	/**
	 * 非特殊点外，其它的全解锁
	 * @param agvid
	 * @param exceptionDot
	 */
	void unlockStationForAgv(int agvid,int exceptionDot );
	
	
	/**
	 * 查询部分出料机台（主要给碱抛下料使用）
	 * @param dotno
	 * @param agvid
	 * @param stationDots
	 * @param islock
	 * @return
	 */
	StationGroupDao fetchNextOutStationForDot(int dotno, int agvid, List<Integer> stationDots,boolean islock);
}
